package com.lglin.service.user;

import com.lglin.bean.user.entity.Address;
import com.lglin.bean.user.entity.User;
import com.lglin.common.bean.Review;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.constraints.Email;
import java.util.List;
import java.util.Map;

@Service
@Validated
public interface UserService {
    /**
     * 用户注册
     *
     * @param user
     * @return
     */
    boolean register(User user);

    /**
     * 检查用户昵称是否可用
     *
     * @param nickname
     * @return
     */
    boolean checkNickname(String nickname);

    /**
     * 检查用户邮箱是否可用
     *
     * @param email
     * @return
     */
    boolean checkEmail(@Email(message = "邮箱格式不正确")String email);

    /**
     * 通过email查询用户
     *
     * @param email
     * @return
     */
    User selectByEmail(String email);

    /**
     * 通过ID查询用户
     * @param id
     * @return
     */
    User selectById(int id);

    /**
     * 更新用户信息
     * @param id
     * @param file
     * @param nickname
     * @return
     */
    boolean updateUserInfo(int id, MultipartFile file, String nickname,String email);

    /**
     * 发布评论
     * @param review
     * @return
     */
    boolean insertReview(Review review);

    /**
     * 获取用户所有的地址ID
     * @param id
     * @return
     */
    List<Integer> selectUserAddressIdByUId(int id);

    /**
     * 获取用户所有的地址
     * @param userAddressIds
     * @return
     */
    List<Address> selectAddressesById(List<Integer> userAddressIds);

    /**
     * 更新用户地址
     * @param address
     * @return
     */
    boolean updateAddressById(Address address);

    /**
     * 新增地址
     * @param address
     * @return
     */
    boolean insertAddress(Address address,int id);

    /**
     * 删除地址
     * @param id
     * @return
     */
    boolean deleteAddressById(int id);

    /**
     * 更新用户密码
     * @param email
     * @param encode_password
     * @return
     */
    boolean updatePasswordByEmail(String email, String encode_password);

    /**
     * 订单提交
     * @param uid
     * @param aid
     * @param message
     * @param map
     * @return
     */
    boolean payOrder(int uid, int aid, String message, Map<Integer, Integer> map);

    /**
     * 用户订单
     * @param uid
     * @return
     */
    List<Map<String, Object>> userOrder(int uid);

    /**
     * 订单详情
     * @param sid
     * @return
     */
    List<Map<String, Object>> orderInfo(String sid);

}
